package top.yeyusmile.common;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import top.yeyusmile.pojo.PushMessage;
import top.yeyusmile.utils.HttpApiUtil;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @author 夜雨
 * @Web www.yeyusmile.top
 * @date 2022/3/15 23:46
 *
 * API列表 https://myqqx.net/MyQQ/5.%E6%89%A9%E5%B1%95%E5%BC%80%E5%8F%91/5.API%E5%88%97%E8%A1%A8.html
 */
@Component
public class MyTemplate {

    @Autowired
    private RobotConfig config;


    //@Value("${yeyu.host}")
    private String host;
    //@Value("${yeyu.port}")
    private String port;
    //@Value("${yeyu.token}")
    private String token;


    /**
     * 刷新属性
     */
    private void init(){
        this.host = config.getHost();
        this.port = config.getPort();
        this.token = config.getToken();
    }


    /**
     * 发送消息（Api_SendMsg）
     * Api_SendMsg	无返回值	向对象、目标发送信息 支持好友 群 讨论组 群临时会话 讨论组临时会话
     * -------------------------------
     * 响应QQ	文本型	机器人QQ
     * 信息类型	整数型	1好友 2群 3讨论组 4群临时会话 5讨论组临时会话 6在线临时会话
     * 收信群_讨论组	文本型	发送群信息、讨论组信息、群临时会话信息、讨论组临时会话信息时填写
     * 收信对象	文本型	最终接收这条信息的对象QQ
     * 内容	文本型	信息内容
     *--------------------------------
     * @param params
     * @return
     */
    public Map<String, Object> sendMsg(Map<String, Object> params) {
        init();
        PushMessage pushMessage = new PushMessage("Api_SendMsg", token, params);
        return HttpApiUtil.sendPost(host, port, pushMessage);
    }

    /**
     * 发送XML消息（Api_SendXml）
     * Api_SendXml	无返回值	发送XML消息
     * --------------------------------------
     * 响应QQ	文本型	机器人QQ
     * 匿名	整数型	0为普通 1为匿名（匿名需要群开启）
     * 信息类型	整数型	同Api_SendMsg 1好友 2群 3讨论组 4群临时会话 5讨论组临时会话
     * 收信群_讨论组	文本型	发群内、临时会话必填 好友可不填
     * 收信对象	文本型	临时会话、好友必填 发至群内可不填
     * ObjectMsg	文本型	XML代码
     * 结构子类型	整数型	00 基本 02 点歌 其他不明 ，默认为0即可
     * ---------------------------
     * @param params
     * @return
     */
    public Map<String, Object> sendXml(Map<String, Object> params) {
        init();
        PushMessage pushMessage = new PushMessage("Api_SendXml", token, params);
        return HttpApiUtil.sendPost(host, port, pushMessage);
    }


    /**
     * 置群验证事件（Api_HandleGroupEvent）
     * Api_HandleGroupEvent	无返回值	某人请求加入群聊验证处理
     * 响应QQ	文本型	机器人QQ
     * data	文本型	MQ_原始信息
     * 处理方式	整数型	10同意 20拒绝 30或0忽略
     * 附加信息	文本型	拒绝时的附加信息
     * 拒绝不再接受	整数型	1为真，慎用
     */
    public Map<String, Object> handleGroupEvent(Map<String, Object> params) {
        init();
        PushMessage pushMessage = new PushMessage("Api_HandleGroupEvent", token, params);
        return HttpApiUtil.sendPost(host, port, pushMessage);
    }



    public Map<String, Object> handleFriendEvent(Map<String, Object> params) {
        init();
        PushMessage pushMessage = new PushMessage("Api_HandleFriendEvent", token, params);
        return HttpApiUtil.sendPost(host, port, pushMessage);
    }

    /**
     * 上传图片（Api_UpLoadPic）
     * Api_UpLoadPic	文本型	上传图片，成功返回该图片GUID（格式为[pic={E9A12BBC-A5F9-1074-40D7-D1F229B4CA05}.png]），失败返回空
     * 响应QQ	文本型	机器人QQ
     * 上传类型	整数型	1好友、临时会话 2群、讨论组 Ps：好友临时会话用类型 1，群讨论组用类型 2；当填写错误时，图片GUID发送不会成功
     * 参考对象	文本型	上传该图片所属的群号或QQ
     * 图片地址	文本型	本地路径或者网络图片地址
     *
     * @param params
     * @return
     */
    public Map<String, Object> upLoadPic(Map<String, Object> params) {
        init();
        PushMessage pushMessage = new PushMessage("Api_UpLoadPic", token, params);
        return HttpApiUtil.sendPost(host, port, pushMessage);
    }


    public Map<String, Object> shutUp(Map<String, Object> params) {
        init();
        PushMessage pushMessage = new PushMessage("Api_Shutup", token, params);
        return HttpApiUtil.sendPost(host, port, pushMessage);
    }

    public Map<String, Object> withDrawMsg(Map<String, Object> params) {
        init();
        PushMessage pushMessage = new PushMessage("Api_WithdrawMsg", token, params);
        return HttpApiUtil.sendPost(host, port, pushMessage);
    }






}
